home *** CD-ROM | disk | FTP | other *** search
- /* Screentool */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <proto/exec.h>
- #include <proto/dos.h>
- #include <proto/graphics.h>
- #include <proto/intuition.h>
- #include <exec/memory.h>
- #include <intuition/intuitionbase.h>
-
- #include "version.h"
-
- struct IntuitionBase *IntBase;
-
- CHARVERSTAG;
-
- struct SToolArgs {
- UBYTE **Screen;
- LONG List,ToFront,ToBack,Constring,Winsize;
- };
-
- char *NOTAPP = "n/a";
-
- char *Template = "SCREEN/M,LIST=L/S,TOFRONT=F/S,TOBACK=B/S,CONSTRING=C/S,WINSIZE=W/S";
-
- char *Options[] = {
- "screentitle or pattern (casesensitive!)",
- "list screens",
- "bring object to front",
- "send object to back",
- "windowsize as CON:-like string",
- "windowsize as info-string"
- };
- char *Errlist[] = {
- "TOFRONT only valid with SCREEN.",
- "LIST not valid with SCREEN. Use patterns instead.",
- "TOFRONT or TOBACK, there could only be ONE.",
- "TOFRONT / TOBACK not valid with LIST.",
- "n/a"
- };
-
- char ProgName[80];
-
- void Help(int err)
- {
- if (!err) {
- char *p,**o;
- o=&Options[0];
- Printf("Usage:\n%s %s\n",ProgName,Template);
- for (p=strtok(Template,",");p;p=strtok(NULL,","))
- Printf(" %s\t%s\n",p,*o++);
- }
- else
- Printf("Error: %s\n",Errlist[err-1]);
- }
-
-
- void DumpScreen(struct Screen *scr)
- {
- UBYTE *s;
- ULONG m;
- s=NOTAPP;
- if (scr->Title) {
- s=scr->Title;
- Printf("Title: \"%s\"\n",s);
- }
- if (scr->DefaultTitle) s=scr->DefaultTitle;
- if (scr->Title != s)
- Printf("DefaultTitle: \"%s\"\n",s);
- m=GetVPModeID(&scr->ViewPort);
- Printf("%ldx%ld",(long)scr->Width,(long)scr->Height);
- Printf("x%ld",scr->RastPort.BitMap->Depth);
- Printf(" Mode: 0x%lx",m);
- Printf(" @(%ld,%ld)\n\n",scr->LeftEdge,scr->TopEdge);
- }
-
-
- LONG __saveds main(void)
- {
- struct Window *win;
- struct Screen *scr;
- struct Screen *scr_p;
- UBYTE *s;
- UBYTE **ScreenName;
-
- UBYTE *patbuf;
- int ret;
-
- struct RDArgs *RDArgs;
- struct SToolArgs Args = {0}; // everything will be FALSE
-
- if (!GetProgramName(ProgName,(long)sizeof(ProgName))) (void)strcpy(ProgName,VERS);
-
- if ((RDArgs=ReadArgs(Template,(LONG *)&Args,NULL))==NULL) {
- PrintFault (IoErr(),ProgName);
- exit(1);
- }
- ScreenName = Args.Screen;
-
- ret = 0;
- if (!(ScreenName ||
- Args.List ||
- Args.ToFront ||
- Args.ToBack ||
- Args.Constring ||
- Args.Winsize)) {
- FreeArgs (RDArgs);
- Help(0);
- exit(0);
- }
-
- if (!ScreenName && Args.ToFront) ret = 1;
- else
- if (Args.ToFront && Args.ToBack) ret = 2;
- else
- if (Args.List && (Args.ToFront || Args.ToBack)) ret = 3;
-
- if (ret) {
- FreeArgs (RDArgs);
- Help(1);
- exit(0);
- }
-
- patbuf = NULL;
- if (ScreenName) {
- LONG ret;
- LONG patsiz;
- patsiz = strlen(*ScreenName)*2+20;
- if (!(patbuf = AllocVec(patsiz,MEMF_PUBLIC))) {
- FreeArgs (RDArgs);
- PrintFault(IoErr(),ProgName);
- exit(10);
- }
- ret = ParsePattern(*ScreenName,patbuf,patsiz);
- if (ret==-1) {
- FreeVec(patbuf);
- FreeArgs (RDArgs);
- PrintFault(IoErr(),ProgName);
- exit(10);
- }
- }
-
- win = IntuitionBase->ActiveWindow;
- scr = IntuitionBase->FirstScreen;
-
- if (ScreenName || Args.ToFront || Args.ToBack || Args.List) {
- scr_p = scr;
- while (scr_p) {
- s="n/a";
- if (scr_p->DefaultTitle) s=scr_p->DefaultTitle;
- if (scr_p->Title) s=scr_p->Title;
- if (Args.List && !patbuf) {
- DumpScreen(scr_p);
- }
- if (patbuf)
- if (MatchPattern(patbuf,s)) {
- if (Args.List) {
- DumpScreen(scr_p);
- }
- if (Args.ToFront) {
- ScreenToFront(scr_p);
- break;
- }
- else
- if (Args.ToBack) {
- ScreenToBack(scr_p);
- break;
- }
- }
- scr_p=scr_p->NextScreen;
- }
- }
-
-
- if (Args.Winsize) { // this ones from WinSize
- Printf ("Window Position: %d x %d , Size: %d x %d\n",win->LeftEdge,win->TopEdge,win->Width,win->Height);
- }
-
- if (Args.Constring) { // this 2
- Printf ("%d/%d/%d/%d/",win->LeftEdge,win->TopEdge,win->Width,win->Height);
- }
-
- if (patbuf) FreeVec(patbuf);
- FreeArgs (RDArgs);
- }
-